﻿using System;
using System.Collections.Generic;
using System.Text;
using AudioPlayer.Plugin.Playback;
using AudioPlayer.Plugin.Storage;
using AudioPlayer.Plugin.Tags;

namespace AudioPlayer.Plugin {
	/// <summary>
	/// Host for plugins
	/// </summary>
	public interface IHost {
		/// <summary>
		/// Gets self owner of plugin.
		/// </summary>
		/// <value>NULL, or The self.</value>
		IPluginBase Self { get; }
		/// <summary>
		/// Gets all plugins plugins.
		/// </summary>
		/// <value>The plugins.</value>
		IPluginBase[] Plugins { get; }

		/// <summary>
		/// Finds plugins
		/// </summary>
		/// <typeparam name="TPlugin">The type of the plugin.</typeparam>
		/// <returns>NULL, or array of plugins</returns>
		IPluginBase<TPlugin>[] Find<TPlugin>();

		/// <summary>
		/// Creates the song.
		/// </summary>
		/// <returns>ISong, or NULL</returns>
		ISong CreateSong();

		/// <summary>
		/// Creates the playlist.
		/// </summary>
		/// <returns>IPlaylist, or NULL</returns>
		IPlaylist CreatePlaylist();

		/// <summary>
		/// Gets the settings.
		/// </summary>
		/// <value>The settings.</value>
		IUserSettings Settings { get; }
	}
}
